using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using EYDIngenieria.ERP.Aplicacion.Gestion;
using EYDIngenieria.ERP.Aplicacion.Mantenedores;
using EYDIngenieria.ERP.ObjetosDeNegocio.Dominio;
using System.Collections.Generic;

public partial class Gestion_CompraMaterialesOT : System.Web.UI.Page
{
    private MantenedorProducto mantenedorProducto = new MantenedorProducto();
    private MantenedorFamiliaProducto mantenedorFamiliaProducto = new MantenedorFamiliaProducto();
    private MantenedorProveedor mantenedorProveedor = new MantenedorProveedor();

    private GestionCompraMaterialesOT gestionCompraMaterialesOT = new GestionCompraMaterialesOT();
    private Producto[] productos;
    private FamiliaProducto[] familiasDeProducto;
    private Proveedor[] proveedores;
    private CompraMaterialesOT compra = new CompraMaterialesOT();
    private IList<GastosGenerales> gastos = new List<GastosGenerales>();
    private DetalleCompraMaterialesOT[] DetalleCompraMaterialesOT;
    private MantenedorEstadoOrdenDeTrabajo mantenedorEstadoOrdenesDeTrabajo = new MantenedorEstadoOrdenDeTrabajo();
    private GestionOrdenDeTrabajo gestionOrdenDeTrabajo = new GestionOrdenDeTrabajo();
    private GestionGastosGenerales gestionGastosGenerales = new GestionGastosGenerales();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session.Keys.Count == 0)
            Response.Redirect("../Default.aspx");
       
        if (!IsPostBack)
        {
            Session.Add("CM",compra);
            Session.Add("GC", gastos);

            
            ListItem li = new ListItem("Seleccione","0");

            ddlFamilia.DataTextField = "Nombre";
            ddlFamilia.DataValueField = "Id";
            familiasDeProducto = mantenedorFamiliaProducto.Listar();
            familiasDeProducto = familiasDeProducto;
            ddlFamilia.DataSource = familiasDeProducto;
            ddlFamilia.DataBind();
            ddlFamilia.Items.Insert(0,li);

            ddlProducto.DataTextField = "Nombre";
            ddlProducto.DataValueField = "Id";
            ddlProducto.DataSource = productos;
            ddlProducto.DataBind();
            ddlProducto.Items.Insert(0, li);


            lblFecha.Text = DateTime.Now.ToShortDateString();
            gdvDetalle.DataSource = compra.Detalle;
            gdvDetalle.DataBind();

            gdvGastos.DataSource = gastos;
            gdvGastos.DataBind();

            LlenarComboOrdenesDeTrabajo();

            habilitar(ddlOrdenDeTrabajo.Items.Count > 0);
            Limpiar();

        }
        btnFinalizar.Enabled = gdvDetalle.Rows.Count > 0;
    }

    private void LlenarComboOrdenesDeTrabajo()
    {
        EstadoOrdenDeTrabajo ingresado = mantenedorEstadoOrdenesDeTrabajo.Buscar("A")[0];
        OrdenDeTrabajo[] ordenesDeTrabajo = gestionOrdenDeTrabajo.Listar(ingresado);
        ListItem li;
        foreach (OrdenDeTrabajo ordenDeTrabajo in ordenesDeTrabajo)
        {
            li = new ListItem(ordenDeTrabajo.Id.ToString() + " - " + ordenDeTrabajo.Cliente.RazonSocial,
                              ordenDeTrabajo.Id.ToString());
            ddlOrdenDeTrabajo.Items.Add(li);

        }
        li = new ListItem("Seleccione", "0");
        ddlOrdenDeTrabajo.Items.Insert(0, li);
    }

    

    protected void ddlFamilia_SelectedIndexChanged(object sender, EventArgs e)
    {
        FamiliaProducto f = new FamiliaProducto();
        f.Id = Int16.Parse(((DropDownList)sender).SelectedValue);
        productos = mantenedorProducto.Listar(f);
        ddlProducto.DataSource = productos;
        ddlProducto.DataBind();
        ListItem li = new ListItem("Seleccione", "0");
        ddlProducto.Items.Insert(0,li);
    }
    protected void ddlProducto_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
    protected void btnAgregar_Click(object sender, EventArgs e)
    {
        long montoTotal = 0;
        OrdenDeTrabajo ot = gestionOrdenDeTrabajo.Obtener(int.Parse(ddlOrdenDeTrabajo.SelectedValue));
        //if (RadioButtonList1.SelectedValue == "2")
        //{
        //    DetalleCompraMaterialesOT doc = new DetalleCompraMaterialesOT();
        //    doc.Cantidad = long.Parse(txbCantidad.Text);
        //    doc.ValorUnitario = long.Parse(txbValorUnitario.Text);
        //    doc.ValorTotal = doc.Cantidad * doc.ValorUnitario;
        //    doc.Producto = mantenedorProducto.Obtener(int.Parse(ddlProducto.SelectedValue));
        //    doc.Fecha = DateTime.Now;
        //    ((CompraMaterialesOT) Session["CM"]).DetalleCompra.Add(doc);
            
        //    gdvDetalle.DataSource = ((CompraMaterialesOT)Session["CM"]).DetalleCompra;
        //    gdvDetalle.DataBind();
        //    SeteaTotal(((CompraMaterialesOT)Session["CM"]));    
        //}
        //else
        //{
            GastosGenerales gc = new GastosGenerales();
            gc.Fecha = DateTime.Now;
            gc.Monto = double.Parse(txbValorUnitario.Text);
            gc.Documento = ddlDocumento.SelectedItem.Text;
            gc.OrdenDeTrabajo = ot;
            gc.Detalle = txbDetalle.Text;
            gc.NumeroDocumento = txbNumeroDocumento.Text;
            ((IList<GastosGenerales>)Session["GC"]).Add(gc);

            gdvGastos.DataSource = ((IList<GastosGenerales>)Session["GC"]);
            gdvGastos.DataBind();
        //}



        txbValorUnitario.Text = string.Empty;
        txbCantidad.Text = string.Empty;
        btnFinalizar.Enabled = gdvGastos.Rows.Count > 0; //gdvDetalle.Rows.Count > 0;
    }

    private void SeteaTotal(CompraMaterialesOT oc)
    {
        long montoTotal = 0;
        foreach (DetalleCompraMaterialesOT d in oc.DetalleCompra)
        {
            montoTotal = montoTotal + d.ValorTotal;   
        }
       // ((Label)gdvDetalle.FooterRow.FindControl("lblTotal")).Text = montoTotal.ToString();
    }

    protected void btnFinalizar_Click(object sender, EventArgs e)
    {
        //CompraMaterialesOT compraMaterialesOt = ((CompraMaterialesOT)Session["CM"]);
        IList<GastosGenerales> gastosGeneraleses = ((IList<GastosGenerales>)Session["GC"]);
        compra.Detalle = txbDetalle.Text;
        compra.Documento = ddlDocumento.SelectedItem.Text;
        compra.Fecha = DateTime.Now;
        compra.NumeroDocumento = txbNumeroDocumento.Text;
        OrdenDeTrabajo ot = gestionOrdenDeTrabajo.Obtener(int.Parse(ddlOrdenDeTrabajo.SelectedValue));
        compra.OrdenDeTrabajo = ot;
        gestionCompraMaterialesOT.RegistraCompra(compra);
        //ot.CompraMaterialesOT = compraMaterialesOt;
        ot.GastosGenerales = gastosGeneraleses;
        gestionOrdenDeTrabajo.Modificar(ot);
        Limpiar();
        btnFinalizar.Enabled = gdvDetalle.Rows.Count > 0;
        Limpiar();
        habilitar(false);
    }

    private void Limpiar()
    {
       
        txbValorUnitario.Text = string.Empty;
        txbNumeroDocumento.Text = string.Empty;
        txbCantidad.Text = string.Empty;
        txbDetalle.Text = string.Empty;
        ddlProducto.SelectedIndex = -1;
        ddlFamilia.SelectedIndex = -1;
        ddlDocumento.SelectedIndex = -1;
        ddlOrdenDeTrabajo.SelectedIndex = -1;
        gdvDetalle.DataSource = null;
        gdvDetalle.DataBind();

        gdvGastos.DataSource = null;
        gdvGastos.DataBind();
    }

    private void habilitar(Boolean habilitado)
    {
        txbValorUnitario.Enabled = habilitado;
        txbNumeroDocumento.Enabled = habilitado;
        txbCantidad.Enabled = habilitado;
        txbDetalle.Enabled = habilitado;
        ddlProducto.Enabled = habilitado;
        ddlDocumento.Enabled = habilitado;
        ddlFamilia.Enabled = habilitado;
        ddlOrdenDeTrabajo.Enabled = habilitado;
    }

    protected void gdvDetalle_SelectedIndexChanged(object sender, EventArgs e)
    {
        compra = ((CompraMaterialesOT)Session["OC"]);
        compra.DetalleCompra.RemoveAt(gdvDetalle.SelectedIndex);
        gdvDetalle.DataSource = compra.Detalle;
        gdvDetalle.DataBind();
        SeteaTotal(compra);
    }
   
    protected void btnNuevo_Click(object sender, EventArgs e)
    {
       
        Limpiar();
        habilitar(true);
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        compra = (CompraMaterialesOT) Session["OC"];
        gestionCompraMaterialesOT.Eliminar(compra);
        Limpiar();
    }
    protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
    {

        pnlProductos.Visible = (RadioButtonList1.SelectedValue == "2");
    }
    protected void ddlOrdenDeTrabajo_SelectedIndexChanged(object sender, EventArgs e)
    {
        OrdenDeTrabajo ot = gestionOrdenDeTrabajo.Obtener(int.Parse(ddlOrdenDeTrabajo.SelectedValue));
        
        if(ot.GastosGenerales ==null)
            ot.GastosGenerales = new List<GastosGenerales>();
        Session["GC"] = ot.GastosGenerales;

        if(ot.CompraMaterialesOT ==null)
            ot.CompraMaterialesOT = new CompraMaterialesOT();
        Session["CM"] =ot.CompraMaterialesOT;

        gdvDetalle.DataSource = ot.CompraMaterialesOT.DetalleCompra;
        gdvDetalle.DataBind();

        gdvGastos.DataSource = ((IList<GastosGenerales>)Session["GC"]);
        gdvGastos.DataBind();
    }
    protected void gdvGastos_SelectedIndexChanged(object sender, EventArgs e)
    {
        OrdenDeTrabajo ot = gestionOrdenDeTrabajo.Obtener(int.Parse(ddlOrdenDeTrabajo.SelectedValue));
        ot.GastosGenerales.RemoveAt(gdvGastos.SelectedIndex);
        gestionOrdenDeTrabajo.Modificar(ot);
        gdvGastos.DataSource = ot.GastosGenerales;
        gdvGastos.DataBind();
        SeteaTotal(compra);
    }
}
